home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 / Ham Radio 2000.iso / ham2000 / tcp_ip / tnos / tnos100s / rwhodump.c < prev    next >
Text File  |  1993-04-30  |  3KB  |  116 lines

  1. #include <stdio.h>
  2. #include <time.h>
  3. #include "global.h"
  4. #include "mbuf.h"
  5. #include "trace.h"
  6.  
  7. #ifdef TNOS_68K
  8. #define fprintf traceprintf
  9. #endif
  10.  
  11. static struct outmp {
  12.     char out_line[9];   /* tty name */
  13.     char out_name[9];   /* user id */
  14.     int32 out_time; /* time on */
  15. };
  16.  
  17. static struct whod {
  18.     char wd_vers;
  19.     char wd_type;
  20.     char wd_fill[2];
  21.     int32  wd_sendtime;
  22.     int32  wd_recvtime;
  23.     char wd_hostname[33];
  24.     int32  wd_loadav[3];
  25.     int32  wd_boottime;
  26.     struct    whoent {
  27.         struct    outmp we_utmp;
  28.         int32  we_idle;
  29.         } wd_we[1024 / sizeof (struct whoent)];
  30. };
  31.  
  32. static int ntohrwhod __ARGS((struct whod *wp,struct mbuf **bpp));
  33.  
  34. void
  35. rwho_dump(fp,bpp)
  36. FILE *fp;
  37. struct mbuf **bpp;
  38. {
  39.     int i;
  40.     int32 t;
  41.     char *cp;
  42.     struct whod rwhod;
  43.     if(bpp == NULLBUFP || *bpp == NULLBUF)
  44.         return;
  45.     fprintf(fp,"RWHO: ");
  46.     if(ntohrwhod(&rwhod,bpp) == -1) {
  47.         fprintf(fp,"bad data\n");
  48.         return;
  49.     }
  50.     if(rwhod.wd_vers != 1)
  51.         fprintf(fp,"version %d  ",rwhod.wd_vers);
  52.     if(rwhod.wd_type != 1)
  53.             fprintf(fp,"type %d  ",rwhod.wd_type);
  54.     cp = ctime(&rwhod.wd_sendtime);
  55.     cp[24] = '\0';
  56.     fprintf(fp,"send %s  ",cp);
  57.     t = rwhod.wd_recvtime;
  58.     if(t / 86400)
  59.         fprintf(fp,"%ld:",t/86400);
  60.     t %= 86400;
  61.     fprintf(fp,"recv %02ld:%02ld\n",t / 3600,(t % 3600)/60);
  62.     fprintf(fp,"      host %s  loadvg %ld %ld %ld  ",rwhod.wd_hostname,
  63.         rwhod.wd_loadav[0],rwhod.wd_loadav[1],
  64.         rwhod.wd_loadav[2]);
  65.         fprintf(fp,"boot %s",ctime(&rwhod.wd_boottime));
  66.     i = 0;
  67.     while(rwhod.wd_we[i].we_utmp.out_line[0] != '\0') {
  68.         fprintf(fp,"      %-12s%-12s",rwhod.wd_we[i].we_utmp.out_name,
  69.         rwhod.wd_we[i].we_utmp.out_line);
  70.         t = rwhod.wd_we[i].we_idle;
  71.         if(t / 86400)
  72.             fprintf(fp,"%ld:",t/86400);
  73.         else
  74.             fprintf(fp,"  ");
  75.         t %= 86400;
  76.         fprintf(fp,"%02ld:%02ld    ",t / 3600, (t % 3600)/60);    
  77.         fprintf(fp,"%s",ctime(&rwhod.wd_we[i].we_utmp.out_time));
  78.         ++i;
  79.     }
  80. }
  81. static int
  82. ntohrwhod(wp,bpp)
  83. struct whod *wp;
  84. struct mbuf **bpp;
  85. {
  86.     int i;
  87.     char wbuf[60];
  88.     if(pullup(bpp,wbuf,60) != 60)
  89.         return -1;
  90.     wp->wd_vers = wbuf[0];
  91.     wp->wd_type = wbuf[1];
  92.     wp->wd_fill[0] = wbuf[2];
  93.     wp->wd_fill[1] = wbuf[3];
  94.     wp->wd_sendtime = get32(&wbuf[4]);
  95.     wp->wd_recvtime = get32(&wbuf[8]);
  96.     memcpy(wp->wd_hostname,&wbuf[12],32);
  97.     wp->wd_hostname[32] = '\0';
  98.     wp->wd_loadav[0] = get32(&wbuf[44]);
  99.     wp->wd_loadav[1] = get32(&wbuf[48]);
  100.     wp->wd_loadav[2] = get32(&wbuf[52]);
  101.     wp->wd_boottime = get32(&wbuf[56]);
  102.     for(i = 0; i < 42; ++i) {
  103.         if(pullup(bpp,wbuf,24) != 24) {
  104.             wp->wd_we[i].we_utmp.out_line[0] = '\0';
  105.             return 0;
  106.         }
  107.         memcpy(wp->wd_we[i].we_utmp.out_line,wbuf,8);
  108.         wp->wd_we[i].we_utmp.out_line[8] = '\0';
  109.         memcpy(wp->wd_we[i].we_utmp.out_name,&wbuf[8],8);
  110.         wp->wd_we[i].we_utmp.out_name[8] = '\0';
  111.         wp->wd_we[i].we_utmp.out_time = get32(&wbuf[16]);
  112.         wp->wd_we[i].we_idle = get32(&wbuf[20]);
  113.     }
  114.     return 0;
  115. }
  116.